package com.wugh.fast.module.mapper.interceptor.plugin;

import com.wugh.fast.module.mapper.EntityInfo;
import tk.mybatis.mapper.entity.Example;

import java.util.List;

/**
 * 描述:注解插件全部都必须是多例的,每个实体对象对应一个插件处理
 *
 * @author 吴冠辉
 * @date 2018/7/27 18:22
 */
public interface CustomizePlugin {
    /**
     * 获取实体类信息
     *
     * @return
     */
    EntityInfo getEntityInfo();

    /**
     * 当前插件是否有效
     *
     * @return
     */
    default boolean isWork() {
        return PluginSwitch.checkWork(this.getClass(), this.getEntityInfo().getEntityClass());
    }

    /**
     * 序号,数字越小,优先级越高
     *
     * @return
     */
    int getIndex();

    /**
     * 是否支持
     *
     * @param entityInfo
     * @return
     */
    boolean support(EntityInfo entityInfo);

    /**
     * 全部条件过滤才做都通过example,
     * <br/>如 搜索,根据指定条件搜索、指定条件更新、指定条件删除
     *
     * @param example
     * @param
     */
    void autoHandleExample(Example example);

    /**
     * 处理更新时的字段处理
     *
     * @param record
     */
    void autoHandleUpdateRecord(Object record);

    /**
     * 全字段批量插入时候的处理
     *
     * @param recordList
     * @param
     */
    void autoHandleInsertList(List recordList);

    /**
     * 全字段插入处理
     *
     * @param record
     * @param
     */
    void autoHandleInsert(Object record);

    /**
     * 不为空字段插入处理
     *
     * @param record
     * @param
     */
    void autoHandleInsertSelective(Object record);

}
